package com.project.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.framework.config.BigDecimalSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 横向进账合同 biz_yf_contract
 *
 * @author baige
 * @date 2025-02-25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("横向进账合同")
public class BizYfContract extends TimeUserEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.ASSIGN_UUID)
    private String id;

    //---------------------基本信息 -----------------------------------

    /**
     * 合同编号
     */
    @ApiModelProperty("合同编号")
    @Excel(name = "合同编号")
    private String code;

    /**
     * 合同名称
     */
    @ApiModelProperty("合同名称")
    @Excel(name = "合同名称")
    private String name;

    /**
     * 负责人类型
     */
    @ApiModelProperty("负责人类型")
    @Excel(name = "负责人类型")
    private String chargerType;

    /**
     * 负责人编号
     */
    @ApiModelProperty("负责人编号")
    @Excel(name = "负责人编号")
    private String chargerCode;

    /**
     * 负责人
     */
    @ApiModelProperty("负责人")
    @Excel(name = "负责人")
    private String chargerName;


    /**
     * 负责人电话
     */
    @ApiModelProperty("负责人电话")
    @Excel(name = "负责人电话")
    private String chargerPhone;

    /**
     * 负责人邮箱
     */
    @ApiModelProperty("负责人邮箱")
    @Excel(name = "负责人邮箱")
    private String chargerEmail;

    /**
     * 所属单位
     */
    @ApiModelProperty("所属单位")
    @Excel(name = "所属单位")
    private String unitId;


    /**
     * 经办人
     */
    @ApiModelProperty("经办人")
    @Excel(name = "经办人")
    private String transactor;

    /**
     * 经办人电话
     */
    @ApiModelProperty("经办人电话")
    @Excel(name = "经办人电话")
    private String transactorPhone;

    /**
     * 合同经费
     */
    @ApiModelProperty("合同经费")
    @Excel(name = "合同经费")
    @JsonSerialize(using = BigDecimalSerializer.class)
    private BigDecimal feeAuthorize;

    /**
     * 合同类别
     */
    @ApiModelProperty("合同类别")
    @Excel(name = "合同类别")
    private String contractType;


    /**
     * 签订日期
     */
    @ApiModelProperty("签订日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "签订日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date authorizeDate;

    /**
     * 开始日期
     */
    @ApiModelProperty("开始日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date beginDate;

    /**
     * 结束日期
     */
    @ApiModelProperty("结束日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结束日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date planEndDate;

    /**
     * 合同有效状态
     */
    @ApiModelProperty("合同有效状态")
    @Excel(name = "合同有效状态")
    private String validState;

    /**
     * 进行状态
     */
    @ApiModelProperty("进行状态")
    @Excel(name = "进行状态")
    private String projectStatusId;

    /**
     * 支付方式
     */
    @ApiModelProperty("支付方式")
    @Excel(name = "支付方式")
    private String payWay;

    /**
     * 甲方是否盖章
     */
    @ApiModelProperty("甲方是否盖章")
    @Excel(name = "甲方是否盖章")
    private String buyerIsSeal;

    /**
     * 乙方是否盖章
     */
    @ApiModelProperty("乙方是否盖章")
    @Excel(name = "乙方是否盖章")
    private String yfIsSeal;

    /**
     * 合同是否回收
     */
    @ApiModelProperty("合同是否回收")
    @Excel(name = "合同是否回收")
    private String isRecover;

    /**
     * 盖章页电子版
     */
    @ApiModelProperty("盖章页电子版")
    @Excel(name = "盖章页电子版")
    private String signature;

    //盖章电子版集合
    @TableField(exist = false)
    private List<Map<String,String>> signatureList;


    //---------------------甲方信息 -----------------------------------

    /**
     * 甲方名称
     */
    @ApiModelProperty("甲方名称")
    @Excel(name = "甲方名称")
    private String buyerName;

    /**
     * 甲方类型
     */
    @ApiModelProperty("甲方类型")
    @Excel(name = "甲方类型")
    private String buyerType;

    /**
     * 甲方联系人
     */
    @ApiModelProperty("甲方联系人")
    @Excel(name = "甲方联系人")
    private String buyerChargerName;

    /**
     * 甲方联系电话
     */
    @ApiModelProperty("甲方联系电话")
    @Excel(name = "甲方联系电话")
    private String buyerTel;

    /**
     * 甲方所属省份
     */
    @ApiModelProperty("甲方所属省份")
    @Excel(name = "甲方所属省份")
    private String buyerArea;

    /**
     * 甲方所属地市
     */
    @ApiModelProperty("甲方所属地市")
    @Excel(name = "甲方所属地市")
    private String buyerCity;

    /**
     * 甲方地址
     */
    @ApiModelProperty("甲方地址")
    @Excel(name = "甲方地址")
    private String buyerAddress;


    /**
     * 甲方邮编
     */
    @ApiModelProperty("甲方邮编")
    @Excel(name = "甲方邮编")
    private String buyerZipcode;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    @Excel(name = "备注")
    private String note;

//---------------------教育部统计信息 -----------------------------------

    /**
     * 统计归属
     */
    @ApiModelProperty("统计归属")
    @Excel(name = "统计归属")
    private String subjectClassId;

    /**
     * 一级学科
     */
    @ApiModelProperty("一级学科")
    @Excel(name = "一级学科")
    private String subjectId;

    /**
     * 社会经济服务目标
     */
    @ApiModelProperty("社会经济服务目标")
    @Excel(name = "社会经济服务目标")
    private String societyTarget;

    /**
     * 项目来源
     */
    @ApiModelProperty("项目来源")
    @Excel(name = "项目来源")
    private String projectSourceId;


    /**
     * 研究类别
     */
    @ApiModelProperty("研究类别")
    @Excel(name = "研究类别")
    private String researchClassId;

    /**
     * 合作形式
     */
    @ApiModelProperty("合作形式")
    @Excel(name = "合作形式")
    private String cooperateId;

    /**
     * 国民经济行业
     */
    @ApiModelProperty("国民经济行业")
    @Excel(name = "国民经济行业")
    private String gmjjhy;

    //---------------------------其他字段-------------------------------

    /**
     * 所属院系
     */
    @ApiModelProperty("所属院系")
    @Excel(name = "所属院系")
    private String divisionId;

    /**
     * 项目密级
     */
    @ApiModelProperty("项目密级")
    @Excel(name = "项目密级")
    private String secretLevelId;


    /**
     * 经费账号
     */
    @ApiModelProperty("经费账号")
    @Excel(name = "经费账号")
    private String feeCode;

    /**
     * 项目组织形式编号
     */
    @ApiModelProperty("项目组织形式编号")
    @Excel(name = "项目组织形式编号")
    private String formId;


    /**
     * 审核状态
     */
    @ApiModelProperty("审核状态")
    @Excel(name = "审核状态")
    private String checkstatus;

    /**
     * 申报审核时间
     */
    @ApiModelProperty("")
    @Excel(name = "申报审核时间")
    private String checkdate;

    /**
     * 审核人
     */
    @ApiModelProperty("审核人")
    @Excel(name = "审核人")
    private String checker;


    /**
     * 专利id
     */
    @ApiModelProperty("专利id")
    @Excel(name = "专利id")
    private String patentId;

    /**
     * 转让专利
     */
    @ApiModelProperty("转让专利")
    @Excel(name = "转让专利")
    private String patentName;

    /**
     * 转让类型
     */
    @ApiModelProperty("转让类型")
    @Excel(name = "转让类型")
    private String transferType;


    /**
     * 认定状态
     */
    @ApiModelProperty("认定状态")
    @Excel(name = "认定状态")
    private String affirmstate;

    /**
     * 登记号
     */
    @ApiModelProperty("登记号")
    @Excel(name = "登记号")
    private String registercode;

    /**
     * 登记日期
     */
    @ApiModelProperty("登记日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "登记日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date registerdate;

    /**
     * 免税状态
     */
    @ApiModelProperty("免税状态")
    @Excel(name = "免税状态")
    private String exemptionstate;


    /**
     * 所有成员Id
     */
    @ApiModelProperty("所有成员Id")
    @Excel(name = "所有成员Id")
    private String authorpids;

    /**
     * 所有部门Id
     */
    @ApiModelProperty("所有部门Id")
    @Excel(name = "所有部门Id")
    private String authorunitids;

    /**
     * 数据完善状态
     */
    @ApiModelProperty("数据完善状态")
    @Excel(name = "数据完善状态")
    private String completedatastatus;


    /**
     * 预算标准id
     */
    @ApiModelProperty("预算标准id")
    @Excel(name = "预算标准id")
    private String budgetStandardId;

    /**
     * 实际结束日期
     */
    @ApiModelProperty("实际结束日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "实际结束日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date actualEndDate;

    //流程相关

    @ApiModelProperty("流程id")
    private String processInstanceId;

    @TableField(exist = false)
    private String taskId;


    @ApiModelProperty("提交类型 ->-1:暂存,1:提交,2:保存并通过)")
    @TableField(exist = false)
    private Integer submitType;

    @TableField(exist = false)
    private Boolean isAuditor;

    //为了初始负责人填充成员表
    @ApiModelProperty("所属单位名称")
    @TableField(exist = false)
    private String unitName;



}
